// 中介者对象
var Mediator = function() {
	// 消息对象
	var _msg = {};
	return {
		/**
		 * 订阅消息方式
		 * @param type   消息名称
		 * @param action 消息回调函数
		 */
		register: function(type, action) {
			// 如果该消息存在
			if (_msg[type]) {
				// 存入回调函数
				_msg[type].push(action);
			} else {
				// 建立消息容器，并存入回调函数
				_msg[type] = [action];
			}
		},
		/**
		 * 发布消息
		 * @param type 消息名称
		 */
		send: function(type) {
			// 如果该消息已经被订阅
			if (_msg[type]) {
				// 遍历该消息的回调函数
				for (var i = 0, len = _msg[type].length; i < len; i++) {
					// 执行回调函数
					_msg[type][i] && _msg[type][i]();
				}
			}
		}
	}
}();


// 测试
// Mediator.register('demo', function() {
// 	console.log('first');
// });
// Mediator.register('demo', function() {
// 	console.log('second');
// });
// // 发布消息
// Mediator.send('demo');


// 订阅消息
/**
 * 显隐导航小组件
 * @param mode       模块
 * @param tag        处理的标签(消息提醒b，网址span)
 * @param showOrHide 显示还是隐藏
 */
var showHideNavWidget = function(mod, tag, showOrHide) {
	// 获取导航模块
	var mod = document.getElementById(mod),
		// 获取下边的标签名为tag的元素
		tag = mod.getElementsByTagName(tag),
		// 如果设置为false或者为hide，则值为hidden,否则为visibile
		showOrHide = (!showOrHide || showOrHide == 'hide') ? 'hidden' : 'visibile';
	// 占位隐藏这些标签
	for (var i = tag.length - 1; i >= 0; i--) {
		tag.style.visibility = showOrHide;
	}
};
// 用户收藏导航模块
(function() {
	// 订阅隐藏用户收藏导航消息提醒
	Mediator.register('hideAllNavNum', function() {
		showHideNavWidget('collection_nav', 'b', false);
	});
	// 订阅显示用户收藏导航消息提醒
	Mediator.register('showAllNavNum', function() {
		showHideNavWidget('collection_nav', 'b', true);
	});
	Mediator.register('hideAllNavUrl', function() {
		showHideNavWidget('collection_nav', 'span', false);
	});
	Mediator.register('showAllNavUrl', function() {
		showHideNavWidget('collection_nav', 'span', true);
	});
}());
// 推荐用户导航
(function() {
	// 订阅隐藏推荐用户导航消息提醒
	Mediator.register('hideAllNavNum', function() {
		showHideNavWidget('recommend_nav', 'b', false);
	});
	// 订阅显示推荐用户导航消息提醒
	Mediator.register('showAllNavNum', function() {
		showHideNavWidget('recommend_nav', 'b', true);
	});
}());
// 常用导航
(function() {
	// 订阅显示最近常用导航网址消息
	Mediator.register('hideAllNavUrl', function() {
		showHideNavWidget('recently_url', 'span', false);
	});
	// 订阅显示推荐用户导航消息提醒
	Mediator.register('showAllNavUrl', function() {
		showHideNavWidget('recently_url', 'span', true);
	});
}());


// 发布消息
(function() {
	// 消息提示选项
	var hideNum = document.getElementById('hide_num'),
		// 网址选项
		hideUrl = document.getElementById('hide_url');
	// 消息提醒选项事件
	hideNum.onchange = function() {
		// 如果勾选
		if (hideNum.checked) {
			// 中介者发布隐藏消息提醒
			Mediator.send('hideAllNavNum');
		} else {
			// 中介者发布显示消息提醒
			Mediator.send('showAllNavNum');
		}
	}
	// 网址选项事件
	hideUrl.onchange = function() {
		// 如果勾选
		if (hideUrl.checked) {
			Mediator.send('hideAllNavUrl');
		} else {
			Mediator.send('showAllNavUrl');
		}
	}
}());
